package db;

import redis.clients.jedis.Jedis;

import java.util.List;
import java.util.Set;

/**
 * Redis数据库操作方法封装
 */
public class RedisQuery {

    /**
     * 添加数据,相同key会覆盖数据，所以也相当于改
     */
    public static void set(String key, String value) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        jedis.set(key, value);
        //Jedis3.0版本后jedisPool.returnResource(final Jedis resource)方法已被弃用，用jedis.close()代替 来归还连接
        jedis.close();
    }


    /**
     * 添加数据，带超时时间，超时自动销毁
     */
    public static void setex(String key, String value, int seconds){
        Jedis jedis = JedisDBPool.getConnectJedis();
        jedis.setex(key, seconds, value);
        jedis.close();
    }

    /**
     * 根据key删除数据
     */
    public static void deleteByKey(String key) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        jedis.del(key);
        jedis.close();
    }

    /**
     * 根据key查询
     */
    public static String getByKey(String key) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        String value = jedis.get(key);
        jedis.close();
        return value;
    }

    /**
     * 设置或刷新一个key的过期时间
     */
    public static void expireKey(String key, int sec) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        jedis.expire(key,sec);
        jedis.close();
    }

    /**
     * append list
     */
    public static void pushList(String key, List<String> list) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        jedis.rpush(key, list.toArray(new String[0]));
        jedis.close();
    }

    public static List<String> getList(String key) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        //lrange没有key也会返回一个空集，故需如此判断一下
        if (!jedis.exists(key)) return null;
        List<String> list = jedis.lrange(key, 0, -1);
        jedis.close();
        return list;
    }

    /**
     * 清空一个list，非删除
     */
    public static void clearList(String key) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        jedis.lrange(key, 0, -1);
        jedis.close();
    }

    /**
     * 向Set中添加一个元素
     */
    public static void addSetElem(String key, String value) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        jedis.sadd(key, value);
        jedis.close();
    }

    public static Set<String> getSet(String key) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        Set<String> set = jedis.smembers(key);
        jedis.close();
        return set;
    }

    /**
     * 从Set中移除一个元素
     */
    public static void removeSetElem(String key, String value) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        jedis.srem(key, value);
        jedis.close();
    }

    /**
     * 查询某条数据是否存在
     */
    public static boolean isExist(String key){
        Jedis jedis = JedisDBPool.getConnectJedis();
        boolean exist = jedis.exists(key);
        jedis.close();
        return exist;
    }

    public final static String DICTIONARY_PATH = "Dictionary";

    public static void zAddToDictionary(String wordStr, int score) {
        Jedis jedis = JedisDBPool.getConnectJedis();
        jedis.zadd(DICTIONARY_PATH,score, wordStr);
        jedis.close();
    }

}
